package com.future.hair.server.util;

//import com.fasterxml.jackson.core.JsonProcessingException;
//import com.fasterxml.jackson.databind.JavaType;
//import com.fasterxml.jackson.databind.ObjectMapper;
//import com.future.hair.server.config.jjwt.JwtHelper;
//import io.jsonwebtoken.Claims;
//import org.springframework.data.redis.core.RedisTemplate;


public class RedisUtil<T> {

//    private RedisTemplate<String, String> redisTemplate;
//
//    private ObjectMapper objectMapper = new ObjectMapper();
//
//    public RedisUtil(RedisTemplate<String, String> redisTemplate){
//        this.redisTemplate = redisTemplate;
//    }
//
//    public void setObject(String key,T data){
//        try {
//            redisTemplate.boundValueOps(key).set(objectMapper.writeValueAsString(data));
//        } catch (JsonProcessingException e) {
//            e.printStackTrace();
//        }
//    }
//
//    public T getObject(String key,CallBack<T> callBack,java.lang.Class<?> parametrized){
//        return dataObject(key, callBack, new CallData<T>() {
//            @Override
//            public T object(String redis) {
//                T data = null;
//                try {
//                    data = (T) objectMapper.readValue(redis, parametrized);
//                } catch (JsonProcessingException e) {
//                    e.printStackTrace();
//                }
//                return data;
//            }
//        });
//    }
//
//
//    public T getObject(String key,CallBack<T> callBack,java.lang.Class<?> parametrized, java.lang.Class<?>... parameterClasses){
//        return dataObject(key, callBack, new CallData<T>() {
//            @Override
//            public T object(String redis) {
//                T data = null;
//                try {
//                    JavaType javaType = objectMapper.getTypeFactory().constructParametricType(parametrized, parameterClasses);
//                    data = objectMapper.readValue(redis, javaType);
//                } catch (JsonProcessingException e) {
//                    e.printStackTrace();
//                }
//                return data;
//            }
//        });
//    }
//
//
//    private T dataObject(String key,CallBack<T> callBack,CallData<T> callData){
//        String redis = redisTemplate.boundValueOps(key).get();
//        if (redis!=null){
//            System.out.println("Redis读取");
//            return callData.object(redis);
//        }else{
//            System.out.println("数据库读取");
//            setObject(key,callBack.object());
//            return callBack.object();
//        }
//    }
//
//    public interface CallBack<T>{
//        public T object();
//    }
//
//    public interface CallData<T>{
//        public T object(String redis);
//    }

}
